Skip to main content

Diagonal Matrix

Traverse Matrix Diagonally

// diagonal matrix

func getDiags(input [][]string) []int {

string2Index := make(map[string]int)
strings := []string{}

startPoints := [][]int{}
for i := len(input) - 1; i >= 0; i-- {
startPoints = append(startPoints, []int{i, 0})
}

for i := 1; i < len(input[0]); i++ {
startPoints = append(startPoints, []int{0, i})
}

for i, sp := range startPoints {

currX := sp[0]
currY := sp[1]
tempStr := ""
for {

tempStr += input[currX][currY]

if len(tempStr) == len(input) {
string2Index[tempStr] = i
strings = append(strings, tempStr)
break
}

currX += 1
currY += 1
if currY >= len(input) || currX >= len(input[0]) {
currX := sp[0]
currY := sp[1]
}

}

}

sort.Strings(strings)

result := []int{}

for _, s := range strings {
result = append(result, string2Index[s])
}

return result
}